package com.br.negocio.vo;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "fornecedor")
@SequenceGenerator(name = "fornecedor_seq", sequenceName = "fornecedor_cod_fornecedor_seq", allocationSize = 1)
@NamedQueries ({
	@NamedQuery(name = "loadAllFornecedor", query = "from FornecedorVO as f order by f.codigo"),
	@NamedQuery(name = "findFornecedor", query = "from FornecedorVO as f where f.codigo = :codigo"),
	@NamedQuery(name = "findDuplicatedFornecedor", query = "from FornecedorVO as f where f.cpfCnpj = :cpf_cnpj and f.tipoFornecedor = :cod_tipo_fornecedor and f.codigo != :codigo")
})
public class FornecedorVO extends PessoaVO implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@Column(name = "cod_fornecedor")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "fornecedor_seq")
	private int codigo;
	
	//Nome ou Raz�o Social
	@Column(name = "nome", nullable = false, length = 50)
	private String nome;
	
	//Apelido ou Nome Fantasia
	@Column(name = "apelido", length = 50)
	private String apelido;
	
	//CPF ou CNPJ
	@Column(name = "cpf_cnpj", unique = true, nullable = false, length = 20)
	private String cpfCnpj;
	
	@Column(name = "telefone_residencial", length = 8)
	private String telefoneResidencial;
	
	@Column(name = "telefone_celular", length = 8)
	private String telefoneCelular;
	
	@Column(name = "telefone_comercial", length = 8)
	private String telefoneComercial;
	
	@Column(name = "email", length = 50)
	private String email;
	
	@Column(name = "site", length = 50)
	private String site;
	
	private ResponsavelVO responsavelVO;
	
//	@OneToMany(fetch = FetchType.EAGER)
//	@Column(name = "cod_servico")
//	private List<ServicoVO> listaSevico;
	
	//Data Nascimento ou Fundacao da Empresa
	@Temporal(TemporalType.DATE)
	@Column(name = "data")
	private Date data;
	
	//Para distinguir entre pessoa Fisica e Juridica
	@Column(name = "cod_tipo_fornecedor", nullable = false)
	private int tipoFornecedor;
	
	public FornecedorVO() {
		
	}

	public int getCodigo() {
		return this.codigo;
	}

	public void setCodigo(int codigo) {
		this.codigo = codigo;
	}

	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public String getApelido() {
		return this.apelido;
	}

	public void setApelido(String apelido) {
		this.apelido = apelido;
	}

	public String getCpfCnpj() {
		return this.cpfCnpj;
	}

	public void setCpfCnpj(String cpfCnpj) {
		this.cpfCnpj = cpfCnpj;
	}

	public String getTelefoneResidencial() {
		return this.telefoneResidencial;
	}

	public void setTelefoneResidencial(String telefoneResidencial) {
		this.telefoneResidencial = telefoneResidencial;
	}

	public String getTelefoneCelular() {
		return this.telefoneCelular;
	}

	public void setTelefoneCelular(String telefoneCelular) {
		this.telefoneCelular = telefoneCelular;
	}

	public String getTelefoneComercial() {
		return this.telefoneComercial;
	}

	public void setTelefoneComercial(String telefoneComercial) {
		this.telefoneComercial = telefoneComercial;
	}

	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getSite() {
		return this.site;
	}

	public void setSite(String site) {
		this.site = site;
	}

	public ResponsavelVO getResponsavelVO() {
		return this.responsavelVO;
	}

	public void setResponsavelVO(ResponsavelVO responsavelVO) {
		this.responsavelVO = responsavelVO;
	}

	public Date getData() {
		return this.data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public int getTipoFornecedor() {
		return this.tipoFornecedor;
	}

	public void setTipoFornecedor(int tipoFornecedor) {
		this.tipoFornecedor = tipoFornecedor;
	}

//	public List<ServicoVO> getListaSevico() {
//		return listaSevico;
//	}
//
//	public void setListaSevico(List<ServicoVO> listaSevico) {
//		this.listaSevico = listaSevico;
//	}
}